home *** CD-ROM | disk | FTP | other *** search
- ##############################################################################
- #
- # Zope Public License (ZPL) Version 1.0
- # -------------------------------------
- #
- # Copyright (c) Digital Creations. All rights reserved.
- #
- # This license has been certified as Open Source(tm).
- #
- # Redistribution and use in source and binary forms, with or without
- # modification, are permitted provided that the following conditions are
- # met:
- #
- # 1. Redistributions in source code must retain the above copyright
- # notice, this list of conditions, and the following disclaimer.
- #
- # 2. Redistributions in binary form must reproduce the above copyright
- # notice, this list of conditions, and the following disclaimer in
- # the documentation and/or other materials provided with the
- # distribution.
- #
- # 3. Digital Creations requests that attribution be given to Zope
- # in any manner possible. Zope includes a "Powered by Zope"
- # button that is installed by default. While it is not a license
- # violation to remove this button, it is requested that the
- # attribution remain. A significant investment has been put
- # into Zope, and this effort will continue if the Zope community
- # continues to grow. This is one way to assure that growth.
- #
- # 4. All advertising materials and documentation mentioning
- # features derived from or use of this software must display
- # the following acknowledgement:
- #
- # "This product includes software developed by Digital Creations
- # for use in the Z Object Publishing Environment
- # (http://www.zope.org/)."
- #
- # In the event that the product being advertised includes an
- # intact Zope distribution (with copyright and license included)
- # then this clause is waived.
- #
- # 5. Names associated with Zope or Digital Creations must not be used to
- # endorse or promote products derived from this software without
- # prior written permission from Digital Creations.
- #
- # 6. Modified redistributions of any form whatsoever must retain
- # the following acknowledgment:
- #
- # "This product includes software developed by Digital Creations
- # for use in the Z Object Publishing Environment
- # (http://www.zope.org/)."
- #
- # Intact (re-)distributions of any official Zope release do not
- # require an external acknowledgement.
- #
- # 7. Modifications are encouraged but must be packaged separately as
- # patches to official Zope releases. Distributions that do not
- # clearly separate the patches from the original work must be clearly
- # labeled as unofficial distributions. Modifications which do not
- # carry the name Zope may be packaged in any form, as long as they
- # conform to all of the clauses above.
- #
- #
- # Disclaimer
- #
- # THIS SOFTWARE IS PROVIDED BY DIGITAL CREATIONS ``AS IS'' AND ANY
- # EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- # PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL DIGITAL CREATIONS OR ITS
- # CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- # USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- # ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- # OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- # OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- # SUCH DAMAGE.
- #
- #
- # This software consists of contributions made by Digital Creations and
- # many individuals on behalf of Digital Creations. Specific
- # attributions are listed in the accompanying credits file.
- #
- ##############################################################################
-
- '''Inserting optional tests with 'sqlgroup'
-
- It is sometimes useful to make inputs to an SQL statement
- optinal. Doing so can be difficult, because not only must the
- test be inserted conditionally, but SQL boolean operators may or
- may not need to be inserted depending on whether other, possibly
- optional, comparisons have been done. The 'sqlgroup' tag
- automates the conditional insertion of boolean operators.
-
- The 'sqlgroup' tag is a block tag. It can
- have any number of 'and' and 'or' continuation tags.
-
- The 'sqlgroup' tag has an optional attribure, 'required' to
- specify groups that must include at least one test. This is
- useful when you want to make sure that a query is qualified, but
- want to be very flexible about how it is qualified.
-
- Suppose we want to find people with a given first or nick name,
- city or minimum and maximum age. Suppose we want all inputs to be
- optional, but want to require *some* input. We can
- use DTML source like the following::
-
- <dtml-sqlgroup required>
- <dtml-sqlgroup>
- <dtml-sqltest name column=nick_name type=nb multiple optional>
- <dtml-or>
- <dtml-sqltest name column=first_name type=nb multiple optional>
- </dtml-sqlgroup>
- <dtml-and>
- <dtml-sqltest home_town type=nb optional>
- <dtml-and>
- <dtml-if minimum_age>
- age >= <dtml-sqlvar minimum_age type=int>
- </dtml-if>
- <dtml-and>
- <dtml-if maximum_age>
- age <= <dtml-sqlvar maximum_age type=int>
- </dtml-if>
- </dtml-sqlgroup>
-
- This example illustrates how groups can be nested to control
- boolean evaluation order. It also illustrates that the grouping
- facility can also be used with other DTML tags like 'if' tags.
-
- The 'sqlgroup' tag checks to see if text to be inserted contains
- other than whitespace characters. If it does, then it is inserted
- with the appropriate boolean operator, as indicated by use of an
- 'and' or 'or' tag, otherwise, no text is inserted.
- '''
-
- ############################################################################
- # Copyright
- #
- # Copyright 1996 Digital Creations, L.C., 910 Princess Anne
- # Street, Suite 300, Fredericksburg, Virginia 22401 U.S.A. All
- # rights reserved.
- #
- ############################################################################
- __rcs_id__='$Id: sqlgroup.py,v 1.7 1999/11/03 16:22:22 brian Exp $'
- __version__='$Revision: 1.7 $'[11:-2]
-
- from DocumentTemplate.DT_Util import parse_params
- str=__builtins__['str']
- from string import strip, join
- import sys
-
- class SQLGroup:
- blockContinuations='and','or'
- name='sqlgroup'
- required=None
- where=None
-
- def __init__(self, blocks):
-
- self.blocks=blocks
- tname, args, section = blocks[0]
- self.__name__="%s %s" % (tname, args)
- args = parse_params(args, required=1, where=1)
- if args.has_key(''): args[args['']]=1
- if args.has_key('required'): self.required=args['required']
- if args.has_key('where'): self.where=args['where']
-
- def render(self,md):
-
- r=[]
- for tname, args, section in self.blocks:
- __traceback_info__=tname
- s=strip(section(None, md))
- if s:
- if r: r.append(tname)
- r.append("%s\n" % s)
-
- if r:
- if len(r) > 1: r="(%s)\n" % join(r,' ')
- else: r=r[0]
- if self.where: r="where\n"+r
- return r
-
- if self.required:
- raise 'Input Error', 'Not enough input was provided!<p>'
-
- return ''
-
- __call__=render
-